import myAxios from '../myAxios/myAxios.js';
import myAxios28 from '../myAxios/myAxios28.js';

import myArr from '../myAxios/myArr.js';
let { GetNumber } = myArr;
let GetSuJiOutPut = async function () {
	// 1. 计算3个工作日后的日期（假设Get3WorkDate函数已实现或需导入）
	const workDate3 = Get3WorkDate(); // 此函数需要您根据C#逻辑自行实现或提供
	const dateString = workDate3.toISOString().slice(0, 10).replace(/-/g, '/'); // 格式化为 'YYYY/MM/DD'

	let outputTable = await myAxios.get('陈帅廷查询周计划_塑机出仓', dateString, 'Q902');

	// 为outputTable中的每个对象添加OUTCOUNT_SUJI属性，初始值设为QQSHL（后续会根据条件覆盖）
	outputTable.forEach(row => {
		row.OUTCOUNT_SUJI = GetNumber(row.QQSHL);
	});

	// 3. 初始化一个空数组cloneTable，用于存储处理后的中间数据
	const cloneTable = [];

	// 4. 遍历outputTable的每一行
	for (const row of outputTable) {
		const matnr = row.MATNR;
		const matname = row.MATNAME;
		const JJQQ = GetNumber(row.JJQQ); // 紧急欠缺数量
		const QQSHL = GetNumber(row.QQSHL); // 总量

		// 判断物料名称是否包含"动力"
		if (matname.includes("动力")) {
			// 4.1 对于动力物料，调用SAP接口获取BOM数据

			const sapResponse = await myAxios.getSap("SAP标准BOM(不展开)", `Q902🈹${matnr}`, "9911");
			let bomTable = sapResponse.TableSet['返回表'];

			// 4.2 遍历BOM表的每一行，计算并添加到cloneTable
			for (const bomRow of bomTable) {
				const menge = GetNumber(bomRow.MENGE); // BOM中的数量比例
				const jjCount = JJQQ * menge; // 计算紧急欠缺数量 * BOM比例
				const outCount = QQSHL * menge; // 计算总量 * BOM比例

				cloneTable.push({
					MATNR: bomRow.IDNRK, // 使用BOM中的组件物料号
					MATNAME: bomRow.MAKTX, // 使用BOM中的组件物料描述
					QQSHL: outCount, // 展开后的总量
					JJQQ: jjCount, // 展开后的紧急欠缺量
					OUTCOUNT_SUJI: outCount // 展开后的OUTCOUNT（初始与QQSHL相同）
				});
			}
		} else {
			// 4.3 对于非动力物料，直接添加到cloneTable
			cloneTable.push({
				MATNR: matnr,
				MATNAME: matname,
				QQSHL: QQSHL,
				JJQQ: JJQQ,
				OUTCOUNT_SUJI: QQSHL // 初始OUTCOUNT设为QQSHL
			});
		}
	}

	// 5. 对cloneTable按MATNR进行分组汇总 (模拟C#的GroupBy和CopyToDataTable)
	const groupMap = new Map(); // 使用Map来存储分组结果，键为MATNR，值为累加后的对象

	for (const item of cloneTable) {
		const key = item.MATNR;
		if (!groupMap.has(key)) {
			// 如果该MATNR还未分组，初始化一个新对象
			groupMap.set(key, {
				MATNR: key,
				QQSHL: 0,
				JJQQ: 0,
				OUTCOUNT_SUJI: 0
			});
		}
		const groupItem = groupMap.get(key);
		// 累加各个数值字段
		groupItem.QQSHL += (GetNumber(item.QQSHL));
		groupItem.JJQQ += (GetNumber(item.JJQQ));
		groupItem.OUTCOUNT_SUJI += (GetNumber(item.OUTCOUNT_SUJI));
	}

	// 将Map转换为数组 gbTable
	let gbTable = Array.from(groupMap.values());

	// 6. 减去已发货数量 (假设matcodeWGZ_SJ_Dic是一个已存在的对象，键为MATNR，值为已发货数量)
	// for (const row of gbTable) {
	// 	const MATNR = row.MATNR;
	// 	if (matcodeWGZ_SJ_Dic && matcodeWGZ_SJ_Dic.hasOwnProperty(MATNR)) {
	// 		const shippedQty = GetNumber(matcodeWGZ_SJ_Dic[MATNR]);
	// 		row.JJQQ = Math.max(0, row.JJQQ - shippedQty); // 防止减成负数
	// 		row.OUTCOUNT_SUJI = Math.max(0, row.OUTCOUNT_SUJI - shippedQty); // 防止减成负数
	// 	}
	// }

	// 7. 返回最终处理后的数据 (gbTable)
	console.log('GetSuJiOutPut :>> ', gbTable);
	return gbTable;
};

let Get3WorkDate = function () {
	let date = new Date();

	// 获取当前是星期几 (0: 周日, 1: 周一, ..., 6: 周六)
	const dayOfWeek = date.getDay();

	// 判断是否为周五、周六或周日
	if (dayOfWeek === 5 || dayOfWeek === 6 || dayOfWeek === 0) { // 5: Friday, 6: Saturday, 0: Sunday
		date.setDate(date.getDate() + 3);
	} else {
		date.setDate(date.getDate() + 2);
	}

	return date;
};


export {
	GetSuJiOutPut,
	Get3WorkDate,
};